home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / boot / czesc_2 / toolmanager / source / prefs / gadget.c < prev    next >
C/C++ Source or Header  |  1993-05-15  |  3KB  |  122 lines

  1. /*
  2.  * gadget.c  V2.1
  3.  *
  4.  * gadget handling
  5.  *
  6.  * (c) 1990-1993 Stefan Becker
  7.  */
  8.  
  9. #include "ToolManagerConf.h"
  10.  
  11. static struct TagItem GlobalTags[]={GT_Underscore, '_',
  12.                                     TAG_MORE};
  13.  
  14. /* Create a gadget list from a GadgetData array */
  15. struct Gadget *CreateGadgetList(struct GadgetData *gdata, ULONG maxgad)
  16. {
  17.  struct Gadget *gl,*g;
  18.  
  19.  /* Create GadTools gadget context */
  20.  gl=NULL;
  21.  if (g=CreateContext(&gl)) {
  22.   struct GadgetData *gd=gdata;
  23.   ULONG i;
  24.  
  25.   for (i=0; i<maxgad; i++, gd++) {
  26.  
  27.    DEBUG_PRINTF("i: %ld\n",i);
  28.  
  29.    /* Set NewGadget values */
  30.    NewGadget.ng_LeftEdge=gd->left;
  31.    NewGadget.ng_TopEdge=gd->top;
  32.    NewGadget.ng_Width=gd->width;
  33.    NewGadget.ng_Height=gd->height;
  34.    NewGadget.ng_GadgetText=gd->name;
  35.    NewGadget.ng_GadgetID=i;
  36.    NewGadget.ng_Flags=gd->flags;
  37.  
  38.    /* Tags supplied? */
  39.    if (gd->tags) {
  40.     /* Yes. Add array */
  41.     GlobalTags[1].ti_Tag=TAG_MORE;
  42.     GlobalTags[1].ti_Data=(ULONG) gd->tags;
  43.    } else
  44.     /* No. Truncate array */
  45.     GlobalTags[1].ti_Tag=TAG_DONE;
  46.  
  47.    /* Create gadget */
  48.    if (!(g=CreateGadgetA(gd->type,g,&NewGadget,GlobalTags))) break;
  49.  
  50.    /* Save gadget pointer */
  51.    gd->gadget=g;
  52.   }
  53.  
  54.   /* All OK. */
  55.   if (g) return(gl);
  56.  
  57.   /* Couldn't create a gadget */
  58.   FreeGadgets(gl);
  59.  }
  60.  
  61.  /* Call failed */
  62.  return(NULL);
  63. }
  64.  
  65. /* Disable a gadget */
  66. void DisableGadget(struct Gadget *g, struct Window *w, BOOL disable)
  67. {
  68.  GT_SetGadgetAttrs(g,w,NULL,GA_Disabled,disable,TAG_DONE);
  69. }
  70.  
  71. /* Duplicate a string gadget buffer */
  72. char *DuplicateBuffer(struct Gadget *gadget)
  73. {
  74.  char *buf=((struct StringInfo *) gadget->SpecialInfo)->Buffer;
  75.  ULONG len=strlen(buf);
  76.  
  77.  /* Buffer not empty? */
  78.  if (len) {
  79.   char *s;
  80.  
  81.   /* Allocate memory for new string */
  82.   if (s=malloc(len+1)) {
  83.    /* Copy string */
  84.    strcpy(s,buf);
  85.    return(s);
  86.   } else
  87.    /* Couldn't allocate memory */
  88.    return(-1);
  89.  }
  90.  
  91.  /* Buffer empty */
  92.  return(NULL);
  93. }
  94.  
  95. /* Find '_' character in gadget text */
  96. char FindVanillaKey(char *gadtext)
  97. {
  98.  unsigned char *cp; /* unsigned is important for the toupper() macro! */
  99.  
  100.  /* Scan gadget text */
  101.  if (cp=strchr(gadtext,'_'))
  102.   /* Underscore found, return next character */
  103.   return(toupper(*(cp+1)));
  104.  else
  105.   /* No underscore found, return dummy character */
  106.   return(1);
  107. }
  108.  
  109. /* Match a given vanilla key with the key array */
  110. ULONG MatchVanillaKey(unsigned char key, char *array)
  111. {
  112.  char *cp;
  113.  
  114.  /* Scan array */
  115.  if (cp=strchr(array,toupper(key)))
  116.   /* Key found, return index */
  117.   return(cp-array);
  118.  else
  119.   /* Key not found, return illegal value */
  120.   return(-1);
  121. }
  122.